package LeetCode._01算法入门.day12动态规划;

import org.junit.Test;

/**
 * @author 挚爱之夕
 * @date 2022-03-03 - 03 - 03 - 15:53
 * @Description 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
 * @Version 简单
 */
public class _70爬楼梯 {
    //最后一步，可能爬1台阶或2台阶
    //f(x) = f(x- 1) + f(x - 2)
    static int n = 10;
    @Test
    public void solve(){
        int res = climbStairs(10);
        System.out.println(res);
        res = climbStairs1(10);
        System.out.println(res);
    }
    //递归(超时)
    public int climbStairs(int n) {
         if(n == 1)
             return 1;
         if(n == 2)
             return 2;
         return climbStairs(n - 1 ) + climbStairs(n - 2);
    }
    //迭代
    public int climbStairs1(int n) {
        if(n == 1)
            return 1;
        if(n == 2)
            return 2;
        int pre = 1;
        int res = 2;
        int temp;
        for(int i = 3; i <= n; i++){
            temp = res;
            res += pre;
            pre = temp;
        }
        return res;
    }
}
